

def testsuite_format(data: list):
    '''
    将元素为 dict 的 list，处理为 testcase 的 list
    testcase 的格式：
    {
        'id': 'Login_001',  #用例编号
        'title': 'Login OK',  #用例标题
        'condition': '',  #前置条件
        'designer': 'Leo',  #设计者
        'flag': '',  #自动化标记
        'result': '',  #用例结果
        'remark': '',  #备注
        'steps':
            [
                {
                'no': 1,  #测试步骤
                'keyword': '输入',
                'page': '产品管系统登录页',
                'element': '用户名',
                'data': 'user1',  #测试数据
                'output': '',  #输出数据
                'score': '',  #测试结果
                'remark': ''  #备注
                },
                {……}
                ……
            ]
    }
    '''
    testsuite = []
    testcase = {'testsuite': '', 'no': 0}

    for case in data:
        # 如果用例编号不为空，则为新的用例
        if case['case_id']:
            case.update({'testsuite': '', 'no': 0})
            testcase = case  # 重新初始化 testcase
            for key in ('id', 'title', 'condition', 'designer', 'flag', 'result', 'remark'):
                if not testcase.get(key):  # tdp适配，无对应参数先填空
                    testcase[key] = ''
            testcase['priority'] = 'M'
        # 如果测试步骤不为空，则为有效步骤，否则用例解析结束
        steps = testcase.get('steps')
        if steps:
            for step in steps:
                step['no'] = str(step['seq_num'])
                for key in ('keyword', 'page', 'element', 'data', 'expected', 'output', 'score', 'remark'):
                    step[key] = step.get(key, '')
                # 仅作为测试结果输出时，保持原样
                step['_keyword'] = step['keyword']
                step['_element'] = step['element']
                step['_data'] = step['data']
                step['vdata'] = step.get('data', '')
                step['_expected'] = step.get('expected', '')
                step['_output'] = step.get('output', '')
                # testcase['steps'].append(step)
        if testcase.get('steps'):
            testsuite.append(testcase)
    return testsuite


